package Test01;

import java.util.Map;
import java.util.Set;
import java.util.StringJoiner;
import java.util.TreeMap;
import java.util.function.BiConsumer;

//TreeMap集合:统计个数
/*
需求:
    字符串"aababcabcdabcde"
    请统计字符串中每一个字符出现的次数，并按照以下格式输出输出结果:
    a (5) b (4) c (3) d (2) e (1)
 */
public class Test10 {
    public static void main(String[] args) {
        /*
        分析:
            统计---->计数器思想
            弊端:如果我们要统计的东西比较多，非常的不方便
         */
        //--------------------------------------------------------//
        /*
        新的统计思想:利用map集合进行统计

        如果题目中没有要求对结果进行排序，默认使用HashMap
        如果题目中要求对结果进行排序，请使用TreeMap

        键:表示要统计的内容
        值:表示次数
         */

        //1、定义字符串
        String str = "aababcabcdabcde";

        //2、创建集合
        TreeMap<Character, Integer> tm = new TreeMap<>();

        //3、遍历字符串得到里面的每一个字符
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            //拿着c到集合中判断是否存在
            if (tm.containsKey(c)) {
                //存在，表示当前字符又出现了一次
                int count = tm.get(c);
                count++;
                tm.put(c, count);
            } else {
                //不存在，表示当前字符是第一次出现
                tm.put(c, 1);
            }
        }

        //4、遍历集合，并按照指定的格式进行拼接
        //StringBuilder
        //StringJoiner

        StringBuilder sb = new StringBuilder();
        tm.forEach((key, value) -> sb.append(key).append("(").append(value).append(")"));

        System.out.println(sb);

        System.out.println("---------------------------");

        StringJoiner sj = new StringJoiner("", "", "");
        tm.forEach((key, value) -> sj.add(key + "").add("(").add(value + "").add(")"));

        System.out.println(sj);
    }
}
